From 75112bdbe13f7c665a2b4185fa1ddf6d102a04e9 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Fri, 18 Sep 2009 08:27:38 +0100 Subject: [PATCH] xend: Unlink VDI instances and VBD instances When VBD instances are destroyed by xm delete command, VDI instances keep linking to the VBD instances unilaterally. Signed-off-by: Masaki Kanno --- tools/python/xen/xend/XendDomain.py | 2 ++ tools/python/xen/xend/XendDomainInfo.py | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/tools/python/xen/xend/XendDomain.py b/tools/python/xen/xend/XendDomain.py index 594d49298a..7a125fb23a 100644 --- a/tools/python/xen/xend/XendDomain.py +++ b/tools/python/xen/xend/XendDomain.py @@ -347,6 +347,7 @@ class XendDomain: if self.is_domain_managed(dom): self._managed_config_remove(dom.get_uuid()) del self.managed_domains[dom.get_uuid()] + dom.unlink_xapi_instances() dom.destroy_xapi_instances() except ValueError: log.warn("Domain is not registered: %s" % dom.get_uuid()) @@ -485,6 +486,7 @@ class XendDomain: if domid in self.domains: del self.domains[domid] + info.unlink_xapi_instances() info.destroy_xapi_instances() else: log.warning("Attempted to remove non-existent domain.") diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index 124c910768..3669052af5 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -4043,6 +4043,18 @@ class XendDomainInfo: except Exception, exn: raise XendError('Failed to destroy device') + def unlink_xapi_instances(self): + from xen.xend import XendDomain + if XendDomain.instance().is_valid_vm(self.info.get('uuid')): + # domain still exists. + return + + for vbd_ref in self.info.get('vbd_refs'): + dev_info = self.info['devices'].get(vbd_ref)[1] + vdi = XendNode.instance().get_vdi_by_uuid(dev_info['VDI']) + if vdi.getVBDs().count(vbd_ref): + vdi.removeVBD(vbd_ref) + def destroy_xapi_instances(self): """Destroy Xen-API instances stored in XendAPIStore. """ -- 2.30.2